package DAO;

import BD.BancaProfessorBD;
import ConexaoBackupBD.ConexaoBD;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class BancaProfessorDAO {
    
    //Conexao com o banco de dados
    ConexaoBD conBD = new ConexaoBD();    
    Statement BDBanPro;
    ResultSet rs;
    
    /**Método para inserir professores na banca. */
    public boolean inserirBancaProfessor(List<BancaProfessorBD> listaBanPro){
        Connection con = conBD.conectar();
        
        String query = "INSERT INTO bancaprofessor VALUES (?, ?, ?, ?, ?, ?, ?)";  
        PreparedStatement stmt;
        
        try {
            stmt = con.prepareStatement(query);
            for (int i = 0 ; i < listaBanPro.size() ; i++ ){  
                stmt.setInt(1, 0);  
                stmt.setInt(2, listaBanPro.get(i).getCod_banca());
                if(listaBanPro.get(i).getCod_professor() == 0){ //não há referencia para professor
                    stmt.setNull(3,java.sql.Types.INTEGER);
                }else{
                    stmt.setInt(3,listaBanPro.get(i).getCod_professor());
                }
                stmt.setString(4, listaBanPro.get(i).getNomeProfessor());
                stmt.setString(5, listaBanPro.get(i).getCpf());  
                stmt.setString(6, listaBanPro.get(i).getInstituicao());  
                stmt.setString(7, listaBanPro.get(i).getFuncao());  
                stmt.addBatch();
            }  
            stmt.executeBatch();  
            return true;
        } catch (SQLException e) {  
            JOptionPane.showMessageDialog(null, e.getMessage(),
                        "Cadastro", JOptionPane.INFORMATION_MESSAGE);
            return false;      
        }            
    }
    
    /**Método para excluir TODOS os professores da banca. */
    public boolean excluiBancaProfessor(int codBanca){
        String sql = "delete from bancaprofessor where cod_banca = ?";   

        try {
            Connection con = conBD.conectar();
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setInt(1, codBanca);
            if (ps.executeUpdate() > 0) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
             JOptionPane.showMessageDialog(null, e.getMessage(), 
                     "Erro no Banco", JOptionPane.ERROR_MESSAGE);
             return false;
        }
    }

    /** listar todos os professores cadastrados para uma banca. */
    public List<BancaProfessorBD> listarBancaProfessor(int codBanca){
        List<BancaProfessorBD> lista = new ArrayList<BancaProfessorBD>();
        try { 
            Connection con = conBD.conectar();
            
            BDBanPro = con.createStatement();

            rs = BDBanPro.executeQuery("SELECT * from bancaprofessor"
                    + " WHERE cod_banca = "+codBanca+" ");

            if (rs != null) {
                while (rs.next()) { 
                    BancaProfessorBD bp = new BancaProfessorBD();
                    bp.setCod_bp(rs.getInt("cod_bp"));
                    bp.setCod_banca(rs.getInt("cod_banca"));
                    bp.setCod_professor(rs.getInt("cod_prof"));
                    bp.setNomeProfessor(rs.getString("nome_prof"));
                    bp.setCpf(rs.getString("cpf_prof"));
                    bp.setInstituicao(rs.getString("instituicao_prof"));
                    bp.setFuncao(rs.getString("funcao_bp"));
                    lista.add(bp);
                }
                return lista; 
          }else { 
                return null; 
          } 
        } catch (SQLException e) { 
            return null; 
        } 
    }
}
